package com.xxl.job.admin.core.route;

import com.xxl.job.admin.core.route.strategy.*;
import com.xxl.job.admin.core.util.I18nUtil;

/**
 * Created by xuxueli on 17/3/10.
 */
public enum ExecutorRouteStrategyEnum {

	FIRST(I18nUtil.getString("jobconf_route_first"), new ExecutorRouteFirst()), LAST(
			I18nUtil.getString("jobconf_route_last"), new ExecutorRouteLast()), ROUND(
					I18nUtil.getString("jobconf_route_round"), new ExecutorRouteRound()), RANDOM(
							I18nUtil.getString("jobconf_route_random"), new ExecutorRouteRandom()), CONSISTENT_HASH(
									I18nUtil.getString("jobconf_route_consistenthash"),
									new ExecutorRouteConsistentHash()), LEAST_FREQUENTLY_USED(
											I18nUtil.getString("jobconf_route_lfu"),
											new ExecutorRouteLFU()), LEAST_RECENTLY_USED(
													I18nUtil.getString("jobconf_route_lru"),
													new ExecutorRouteLRU()), FAILOVER(
															I18nUtil.getString("jobconf_route_failover"),
															new ExecutorRouteFailover()), BUSYOVER(
																	I18nUtil.getString("jobconf_route_busyover"),
																	new ExecutorRouteBusyover()), SHARDING_BROADCAST(
																			I18nUtil.getString("jobconf_route_shard"),
																			null);

	ExecutorRouteStrategyEnum(String title, ExecutorRouter router) {
		this.title = title;
		this.router = router;
	}

	private String title;

	private ExecutorRouter router;

	public String getTitle() {
		return title;
	}

	public ExecutorRouter getRouter() {
		return router;
	}

	public static ExecutorRouteStrategyEnum match(String name, ExecutorRouteStrategyEnum defaultItem) {
		if (name != null) {
			for (ExecutorRouteStrategyEnum item : ExecutorRouteStrategyEnum.values()) {
				if (item.name().equals(name)) {
					return item;
				}
			}
		}
		return defaultItem;
	}

}
